package sessionBean;


import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityNotFoundException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import entityBean.Agenzia;
import entityBean.Cliente;
import entityBean.Operatore;

/**
 * Session Bean implementation class RegistrazioneCtrl
 */
@Stateless(name="RegistrazioneCtrl")
@Remote(RegistrazioneCtrlRemote.class)
public class RegistrazioneCtrl implements RegistrazioneCtrlRemote {

	@PersistenceContext(unitName="cvproject") 
	private EntityManager manager;

	private final int EXY = 0;

	private final int EXN = 1;

	/**
	 * Default constructor. 
	 */
	public RegistrazioneCtrl() {

		// TODO Auto-generated constructor stub

	}

	@Override
	public int regOperatore(Operatore o) {

		//Verifico se è già presente un operatore con quel codice
		Operatore op = manager.find(Operatore.class, o.getCodOp());

		if(op == null) {

			//Salvo la nuova entità nel DB
			manager.persist(o);

			return EXY;

		}

		return EXN;

	}

	@Override
	public int regAgenzia(Agenzia a) {

		try {

			//Verifico se ci sono altre agenzie con quello username
			String s = "FROM agenzia a WHERE a.username=:username";
			Query q = manager.createQuery(s);
			q.setParameter("username", a.getUsername());

			q.getSingleResult();

			//Se trovo l'agenzia avviso l'utente con un messaggio di errore
			return EXN;

		}
		catch(EntityNotFoundException e) {

			manager.persist(a);

			return EXY;

		}

	}

	@Override
	public int regCliente(Cliente c) {

		Cliente cl = manager.find(Cliente.class, c.getCodFis());

		if(cl != null) {  //Il cliente è già registrato

			return EXN;  

		}

		else {

			//Verifico se esiste un altro cliente con lo stesso username

			try {

				String s = "FROM cliente c WHERE c.username =: username";
				Query q = manager.createQuery(s);
				q.setParameter("username", c.getUsername());

				q.getSingleResult();

				return -1;

			}
			catch(EntityNotFoundException e) {

				//Non c'è nessun cliente con quel cf e con quello username nel DB ---> posso inserire il nuovo cliente

				manager.persist(c);

				return EXY;

			}

		}

	}

}
